package com.shujia.spark.opt

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object Demo2MapPartitions {
  def main(args: Array[String]): Unit = {
    //1、创建spark的执行环境
    val conf = new SparkConf()
    //设置运行模式
    conf.setMaster("local")
    conf.setAppName("wc")
    val sc = new SparkContext(conf)

    //2、读取数据
    //RDD:弹性的分布式数据集（相当于List）
    val linesRDD: RDD[String] = sc.textFile("data/lines.txt")

    val wordsRDD: RDD[String] = linesRDD.mapPartitions(iter => {
      //mapPartitions和foreachPartition一样,当与需要读取外部数据时使用
      //比如创建数据库连接,使用MapPartitions时,只会在分区内创建一次,
      iter.flatMap(_.split(","))
    })
  }
}
